#ifndef PF_NET_MOD
#define PF_NET_MOD

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kthread.h>
#include <linux/smp_lock.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/sched.h>
#include <linux/pid.h>
#include <linux/netdevice.h>
#include <linux/ip.h>
#include <linux/in.h>
#include <linux/inetdevice.h>
#include <linux/delay.h>
#include <linux/rtnetlink.h>
#include "workqueue.h"
#include "phs_net.h"

#define PORT 50000

// inicializacia sietovej vrstvy, vytvorenie vlakna pre pocuvanie
int pf_s_init( void ); 

// ukoncuje socket pri ukonceni modulu
void pf_s_exit( void );

struct pf_net_struct
{
		int pf_run;
		int pf_wait;
		int ladr;
		struct task_struct *pf_thread;
		struct socket *pf_s_rec;
		struct socket *pf_s_bc;
		struct sockaddr_in *pf_sadd_bc;
		struct sockaddr_in pf_sadd_rec;
};
// do not touch ... will kill you in a moment ... VK
// funkcie pre workqueue na odoslanie hello packetu
int pf_send_hello_workqueue(char *buf, int len);

// odosle jeden hello packet na vsetky adresy v neighbours.h, buf = sprava v pakete, len = dlzka datovej casti
//ak je uspesna vracia 0,  ak chyba vrati zapornu hodnotu. Na adresy sa posielav cykle, ak natrafi na chybu, automaticky sa ulozi a dalej sa uz nepokusa odoslat
int pf_send_hello(char *buf, int len);

//odoslanie jedneho packetu, dest = adresa ciela, char = sprava na odoslanie, len = dlzka dat
//ak je uspesna vracia dlzkuodoslanych dat (takze malo byt rovnake ako len), ak chyba vrati zapornu hodnotu
int pf_send_data(uint32_t dest, char *buf, int len);

// do not touch ... strielam... VK
// sluzi pre workqueue na korektne a bezproblemove odosielanie packetu
int pf_send_data_workqueue(uint32_t dest, char *buf, int len);

#endif
